package thread;


import org.junit.Test;

import java.util.List;
import java.util.concurrent.*;

//1、Java中有哪几种方式来创建线程执行任务？
// 1.继承Thread
//public class MultipleThreads  extends Thread{
//    @Test
//    public void test1(){
//        MultipleThreads multipleThreads=new MultipleThreads();
//        multipleThreads.start();
//    }
//    @Override
//    public void run() {
//        System.out.println("继承Thread hello ");
//    }
//}
//2.实现Runnable接口 匿名内部类的方法实现  lambda表达式方法实现
//public class MultipleThreads  implements Runnable{
//
//    @Test
//    public void test2(){
//        Thread thread=new Thread(new MultipleThreads());
//        thread.start();
//    }
//    //2.1. 匿名内部类的方法实现  @FunctionalInterface函数式接口 里面只有一个run方法
//    @Test
//    public void test3(){
//      Thread thread=new Thread(new Runnable() {
//          @Override
//          public void run() {
//              System.out.println("匿名内部类的方法实现  hello");
//          }
//      });
//      thread.start();
//    }
//    //2.2.lambda表达式方法实现
//    @Test
//   public void test4(){
//        Thread thread=new Thread(()->{
//            System.out.println("lambda表达式方法实现 hello");
//        });
//        thread.start();
//    }
//    @Override
//    public void run() {
//        System.out.println("实现Runnable接口 hello ");
//    }
//}
//3.实现Callable  new 一个实现类，也可以匿名内部类，也可以lambda表达式
//public class MultipleThreads implements Callable<String>{
//    @Test
//    public  void test5() throws ExecutionException, InterruptedException {
//        FutureTask<String> futureTask=new FutureTask<>(new MultipleThreads());
////        FutureTask<String> futureTask=new FutureTask<>(new Callable<String>() {
////            @Override
////            public String call() throws Exception {
////                return "匿名内部类的方法实现Callable";
////            }
////        });
//        Thread thread=new Thread(futureTask);
//        thread.start();
//        String result=futureTask.get();
//        System.out.println(result);
//    }
//
//    @Override
//    public String call() throws Exception {
//        return "实现Callable";
//    }
//}

//4. 利用线程池来创建线程

public class MultipleThreads implements Runnable{
    @Test
    public  void test5(){
        //不推荐这种
        ExecutorService executorService= Executors.newFixedThreadPool(10);
        executorService.execute(new MultipleThreads());
    }
    @Override
    public void run() {
        System.out.println("利用线程池来创建线程");
    }
}